/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.transfred.dao;

import br.com.transfred.dao.framework.DaoHelper;
import br.com.transfred.dao.framework.QueryMapper;
import br.com.transfred.entity.Motorista;
import br.com.transfred.exception.CreateDaoException;
import br.com.transfred.exception.UpdateDaoException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Marcio
 */
public class MotoristaDao {

    private DaoHelper daoHelper;

    public MotoristaDao() {
        daoHelper = new DaoHelper();
    }

    public void inserir(Motorista motorista) throws CreateDaoException {

        try {
            daoHelper.beginTransaction();
            long id = daoHelper.executePreparedUpdateAndReturnGeneratedKeys(daoHelper.getConnectionFromContext(),
                    "insert into motorista (nome, endereco) values ( ? , ? )" 
                      , motorista.getNome()
                    //  , paciente.getRg()
                    //   , paciente.getCpf()
                    //   , paciente.getSexo().toString() 
                    //   , new Date( paciente.getCriacao().getTime() ) 
                    , motorista.getEndereco());
            motorista.setId(id);

            daoHelper.endTransaction();

        } catch (SQLException e) {
            daoHelper.rollbackTransaction();
            throw new CreateDaoException("Nao foi possivel armazenar Motorista " + motorista, e);
        }
    }

    public void atualizar(Motorista motorista) throws UpdateDaoException {

        final String query = "update paciente set nome = ? , rg = ? , cpf = ? , sexo = ? where id = ? ";

        try {
            daoHelper.beginTransaction();
            daoHelper.executePreparedUpdate(query //	  , paciente.getNome()
                    //  , paciente.getRg()
                    //  , paciente.getCpf()
                    //  , paciente.getSexo().name()
                    , motorista.getId());



            daoHelper.endTransaction();
        } catch (SQLException e) {
            daoHelper.rollbackTransaction();
            throw new UpdateDaoException("Não foi possível atualizar Motorista", e);
        }

    }

    public List<Motorista> listaTodosMotoristas() {

        final List<Motorista> motoristas = new ArrayList<Motorista>();

        try {

            daoHelper.executePreparedQuery("select * from motorista", new QueryMapper<Motorista>() {
                @Override
                public List<Motorista> mapping(ResultSet rset) throws SQLException {
                    while (rset.next()) {
                        Motorista motorista = new Motorista();
                        motorista.setId(rset.getInt("idMotorista"));
                        motorista.setNome( rset.getString("nome") );
                        //paciente.setCpf( rset.getString("cpf") );
                        motorista.setEndereco(rset.getString("endereco"));
                        //paciente.setSexo( SexoType.valueOf( rset.getString("sexo") ) );
                        motoristas.add(motorista);
                    }
                    return motoristas;
                }
            });
        } catch (SQLException e) {
            throw new CreateDaoException("Erro SQL ao listar motoristas", e);
        }

        return motoristas;

    }

    public void excluir(Motorista motorista) {
    }
}
